import pandas as pd
from langchain_core.tools import tool
from typing import Annotated
from .comm_utils import get_parameter

@tool
def query_adcode(
    city: Annotated[str, "城市名/地区名，参数必须是城市名/地区名，例如'北京市'、'北京'、'朝阳区'，除此之外不能有任何其他字符。"], 
    fileName: Annotated[str, "待解析Excel文件路径与名称。"] ="data/AMap_adcode_citycode.xlsx"
    ) -> str:
    """
    查询参数指定城市名或地区名所对应的adcode值，参数必须是城市名/地区名，例如'北京市'、'北京'、'朝阳区'，除此之外不能有任何其他字符。
    """
    city=get_parameter(city)
    #print(f"===参数===\ncity=【{city}】")

    # 读取 Excel 文件
    try:
        df = pd.read_excel(fileName)  # 可以同时指定参数 sheet_name 值以读取特定Sheet
    except FileNotFoundError:
        print(f"Error: 文件 '{fileName}'不存在. 请检查文件路径。")
    except ValueError as e:
        print(f"Error: {e}. 指定文件不是有效的Excel文件。")

    # 打印前几行数据以查看结构
    #print(df.head())

    # 查询第 n 行（假设你想查询第 5 行）
    #n = 5
    #row_data = df.iloc[n - 1]  # iloc 是基于位置的索引，n - 1 是因为行号从 0 开始
    #print(f"Row {n} data:\n", row_data)

    # 条件查询
    filtered_rows = df[df['中文名'].str.startswith(city)]

    if filtered_rows is None or filtered_rows.size == 0:
        raise ValueError("参数错误，请检查城市名/地区名是否存在！")
    # 返回查询结果的adcode
    try:
        #print(f"===结果===\n{filtered_rows.iloc[0]['adcode']}")
        return filtered_rows.iloc[0]['adcode']
    except IndexError:
        return None


if __name__ == '__main__':
    print(f"\n===Schema===\n{query_adcode.args_schema.schema()}")
    print(f"\n===Test===\n{query_adcode.invoke('北京')}")
